Migo商城2.0 商品规格参数的实现(1) 十

Migo商城2.0 商品规格参数的实现(1) 十

先看看一张jd的商品规格的截图吧

分析:

规格参数:

1、同一类商品的规格分类相同

2、同一类商品的规格项一致

3、不同商品的规格参数不同

思路:

第一种方式:

可以把数据保存到表中

表就不画了,单单这个功能所涉及的表:商品分类表 规格参数-分类表 商品表 规格参数-商品规格参数 规格参数-规格项表

想想就觉得 查询的sql语句比较复杂,需要关联的表很多,会给数据库造成很大压力。不推荐使用此方法

第二种方法:

1、可以把规格分组和规格项使用json数据表示,保存到一个字段中。规格参数模板。

2、添加商品时读取规格参数的模板,根据模板生成表单,供客户输入规格参数。

3、把动态表单中的内容读取出来生成json数据保存到数据库中。

4、展示规格参数时,根据商品id读取规格参数json数据生成html展示到jsp页面

具体实现:

1、 模板如何存储?

a) 存储到数据库

b) 字段不能固定

  1. Map
  2. Json 这里选择这种

2、 存储的json结构 以后添加(TODO) 不想打开上个项目单独拿数据了,请原谅我的懒惰!

模板结构

数据库表结构

后台实现

添加mapper:

创建service:

1
2
3
4
5
6
7
/**
* Author 知秋
* Created by kauw on 2016/11/14.
*/
@Service
public class ItemParmService extends BaseService<ItemParam> {
}
1
2
3
4
5
6
7
/**
* Author 知秋
* Created by kauw on 2016/11/14.
*/
@Service
public class ItemParamItemService extends BaseService<ItemParamItem> {
}

选择类目

根据选择的类目进行判断,如果该类目所对应的模板存在,提醒用户已经存在,如果模板不存在,可以创建模板

根据商品的分类id查询tb_item_param表,如果查询到结果说明此模板已经添加

这里js代码改造下,使其更加适合restful格式化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$.ajax({
type: "GET",
url: "/rest/item/param/" + node.id,
statusCode : {
200 : function(){
//模板存在
$.messager.alert("提示", "该类目已经添加,请选择其他类目。", undefined, function(){
$("#itemParamAddTable .selectItemCat").click();
});
},
404 : function(){
//模板不存在
$(".addGroupTr").show();
},
500 : function(){
alert("error");
}
}
});

请求的url:/item/param/{cid}

参数:cid

controller:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.migo.controller;

import com.migo.pojo.ItemParam;
import com.migo.service.ItemParmService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
* Author 知秋
* Created by kauw on 2016/11/14.
*/
@Controller
@RequestMapping("item/param")
public class ItemParamController {
private final Logger logger= LoggerFactory.getLogger(ItemParamController.class);
@Autowired
private ItemParmService itemParmService;

@RequestMapping(value = "{itemCatId}" ,method = RequestMethod.GET)
public ResponseEntity<ItemParam> getItemParamByCid(@PathVariable("itemCatId") Long itemCatId){
try {
if (logger.isInfoEnabled()) {
logger.info("查询某商品规格模板参数模板 itemCatId= {}",itemCatId);
}
ItemParam example=new ItemParam();
example.setItemCatId(itemCatId);
ItemParam itemParam = this.itemParmService.queryOne(example);
if (itemParam==null) {
if (logger.isInfoEnabled()) {
logger.info("所查询商品规格模板参数模板 不存在 itemCatId= {}",itemCatId);
}
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);

}
return ResponseEntity.ok(itemParam);
} catch (Exception e) {
logger.error("查询某商品规格模板参数模板 失败 itemCatId= {}",itemCatId,e);
}
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
}

运行测试结果:

今天晚上有点事,耽搁了,就到这里吧,明天继续

您的支持将鼓励我继续创作!